package weiyao.CrawlerProcessor;


import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class ImageMapParser {

    /**
     * 从HTML内容中提取所有有效的Less链接
     *
     * @param htmlContent HTML内容字符串
     * @param baseUrl 基础URL（用于解析相对路径）
     * @return 包含所有有效Less链接的集合
     */
    public static Set<String> extractLessLinks(String htmlContent, String baseUrl) {
        Set<String> lessLinks = new HashSet<>();
        //解析html
        Document doc = Jsoup.parse(htmlContent);

        // 1. 查找所有<area>标签
        Elements areaTags = doc.select("map area");

        for (Element area : areaTags) {
            String href = area.attr("href");
            String title = area.attr("title");

            // 2. 过滤有效的Less链接
            if (isValidLessLink(href, title)) {
                try {
                    // 3. 将相对路径转换为绝对URL
                    String absoluteUrl = resolveAbsoluteUrl(href, baseUrl);
                    lessLinks.add(absoluteUrl);
                } catch (URISyntaxException e) {
                    System.err.println("无法解析URL: " + href + " - " + e.getMessage());
                }
            }
        }

        return lessLinks;
    }

    /**
     * 判断链接是否是有效的Less链接
     *
     * @param href 链接地址
     * @param title 链接标题
     * @return 如果是有效的Less链接返回true，否则false
     */
    private static boolean isValidLessLink(String href, String title) {
        // 1. 跳过锚点链接（以#开头的）
        if (href.startsWith("#")) {
            return false;
        }

        // 2. 检查标题是否包含"Less"关键字
        if (title != null && title.toLowerCase().contains("less")) {
            return true;
        }

        // 3. 检查href是否包含"Less"路径
        if (href.toLowerCase().contains("less")) {
            return true;
        }

        return false;
    }

    /**
     * 将相对URL转换为绝对URL
     *
     * @param relativeUrl 相对URL
     * @param baseUrl 基础URL
     * @return 绝对URL
     * @throws URISyntaxException 如果URL格式无效
     */
    private static String resolveAbsoluteUrl(String relativeUrl, String baseUrl) throws URISyntaxException {
        URI baseUri = new URI(baseUrl);
        URI resolvedUri = baseUri.resolve(relativeUrl);
        return resolvedUri.toString();
    }

    /**
     * 从HTML内容中提取所有基础链接（非Less链接）
     *
     * @param htmlContent HTML内容字符串
     * @param baseUrl 基础URL（用于解析相对路径）
     * @return 包含所有基础链接的集合
     */
    public static Set<String> extractBaseLinks(String htmlContent, String baseUrl) {
        Set<String> baseLinks = new HashSet<>();
        Document doc = Jsoup.parse(htmlContent);

        // 1. 查找所有<a>标签
        Elements anchorTags = doc.select("a");

        for (Element anchor : anchorTags) {
            String href = anchor.attr("href");

            // 跳过锚点链接
            if (href.startsWith("#")) {
                continue;
            }

            try {
                // 解析为绝对URL
                String absoluteUrl = resolveAbsoluteUrl(href, baseUrl);
                baseLinks.add(absoluteUrl);
            } catch (URISyntaxException e) {
                System.err.println("无法解析URL: " + href + " - " + e.getMessage());
            }
        }

        return baseLinks;
    }
}